/// SeaORM是一种关系型ORM，可以帮助您在熟悉动态语言的情况下用Rust构建web服务
// SeaORM官方网址：  https://crates.io/crates/sea-orm/
/*
特征
    1、异步
    SeaORM依赖于SQLx，是一个从第一天起就支持异步的新库。
    2、动态
    SeaORM基于SeaQuery构建，允许您构建复杂的动态查询。
    3、可测试
    使用模拟连接和/或SQLite为您的应用程序逻辑编写测试。
    4、以服务为导向
    快速构建在REST、GraphQL和gRPC API中连接、过滤、排序和分页数据的服务。
*/

use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "t_blog")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: i32,
    pub title: String,
    pub content: String,
    #[sea_orm(column_type = "DateTime", nullable)]
    pub created_at: Option<chrono::NaiveDateTime>,
    #[sea_orm(column_type = "DateTime", nullable)]
    pub updated_at: Option<chrono::NaiveDateTime>,
    pub user_id: i32,
}

// Relation 指定与其他实体的关系
// 此处相当与实体组合，表示本实体模型依赖一个外部实体模型Fruit，其中has_many表示以来的子模型位置，super表示当前模型所在目录
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}

// ActiveModel 具有其对应模型的所有属性，但所有属性都包装在 ActiveValue 中。
// ActiveModel 上不同操作的钩子。例如，可以执行自定义验证逻辑或触发副作用。在事务中，您甚至可以在操作完成后中止操作，从而防止其保存到数据库中。相当与Java中的Service或者Mapper接口实现类
impl ActiveModelBehavior for ActiveModel {}

// 不要删除关系枚举（Relation）或活动模型行为（ActiveModelBehavior） impl 块，即使它们是空的。


